import Vue from 'vue'
import App from '@/App'
import router from '@/router'                 // api: https://github.com/vuejs/vue-router
import store from '@/store'                   // api: https://github.com/vuejs/vuex
import VueCookie from 'vue-cookie'            // api: https://github.com/alfhen/vue-cookie
import 'element-ui/lib/theme-chalk/index.css'
import ElementUI from 'element-ui'
import '@/element-ui'                         // api: https://github.com/ElemeFE/element
import '@/icons'                              // api: http://www.iconfont.cn/
import '@/element-ui-theme'
import '@/assets/scss/index.scss'
import httpRequest from '@/utils/httpRequest' // api: https://github.com/axios/axios
import { isAuth, isButtonAuth } from '@/utils'
import cloneDeep from 'lodash/cloneDeep'
import Global from '@/utils/global'
import '@/style/index.css'

Vue.use(VueCookie)
Vue.use(Global)
Vue.use(ElementUI)
Vue.config.productionTip = false

Vue.directive('preventReClick', {
  inserted (el, binding) {
    el.addEventListener('click', () => {
      if (!el.disabled) {
        el.disabled = true
        setTimeout(() => {
          el.disabled = false
        }, binding.value || 3000)
      }
    })
  }
})

// 非生产环境, 适配mockjs模拟数据                 // api: https://github.com/nuysoft/Mock
if (process.env.NODE_ENV !== 'production') {
  require('@/mock')
}

// 挂载全局
Vue.prototype.$http = httpRequest // ajax请求方法
Vue.prototype.isAuth = isAuth     // 权限方法
Vue.prototype.isButtonAuth = isButtonAuth     // 按钮权限方法

// 保存整站vuex本地储存初始状态
window.SITE_CONFIG['storeState'] = cloneDeep(store.state)

Vue.prototype.returnRealValue = function (key) {
  let obj = JSON.parse(window.localStorage.getItem('mixin_enumerationfieldData'))
  let arr = key.split(',')
  if (arr.length === 1) {
    return obj[key]
  } else {
    let newStr = ''
    arr.forEach((item, index) => {
      newStr += obj[item] + ','
    })
    return newStr.substr(0, newStr.length - 1)
  }
}
/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,
  template: '<App/>',
  components: { App }
})
